/*
 * parser-tools.h
 *
 *  Created on: Apr 26, 2013
 *      Author: koldar
 */

#ifndef PARSER_TOOLS_H_
#define PARSER_TOOLS_H_

#include "lex-tools.h"
#include "lexer.h"

int lookahead;
//TODO aggiornare la documentazione

/**genera un errore di simbolo non aspettato
 *
 * @param tokenexpected il simbolo che si stava aspettando
 */
void parseerror(int tokenexpected);

/**aggiorna il lookahead character con il prossimo token letto dal file passato in parse.
 * richiamare la funzione parse prima di utilizzare questo comando
 */
void next();
/**controlla che la variabile lookahead coincida con il token passato come parametro.
 * @param token il simbolo da confrontare con lookahead
 * @return
 * 		se token==lookahead esegue next() e ritorna tutte le informazioni relative al vecchio lookahead symbol
 * 		se token!=lookahead mostra un messaggio d'errore
 *
 */
LexVal match(int token);

/**rimuove le quote di una strings iniziali e finali. Per esempio:
 * <table>
 * 	<tr>
 * 	 <th>stringa iniziale</th>
 * 	 <th>stringa finale</th>
 * 	</tr>
 * 	<tr>
 * 	 <td>"ciao"</td>
 * 	 <td>ciao</td>
 * 	</tr>
 * 	<tr>
 * 	 <td>"dissi: "bene"."</td>
 * 	 <td>dissi: "bene".</td>
 * 	</tr>
 * </table>
 *
 * \pre
 *  \li all'inizio e alla fine della stringa ci devono essere i i quoting (")
 * \post
 *  \li una nuova istanza di una stringa e' allocata in memoria. <b>Deve essere liberata manualemente</b>
 *
 * @param str la stringa da modificare
 * @return la stringa originale in cui i quoting iniziali e finali sono eliminati
 */
char* truncateQuotes(char* str);


#endif /* PARSER_TOOLS_H_ */
